home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 10
/
FM Towns Free Software Collection 10.iso
/
tos_updt
/
fmcity
/
palcom
/
auto
/
script
/
sendftsr.mx
< prev
Wrap
Text File
|
1995-04-17
|
20KB
|
709 lines
//--------------------------------------------------------------------------//
// PALCOM V2.1 L10 //
// NIFTY-Serve 汎用ファイル送信スクリプト(常駐外部) //
// //
// CopyRight(C) 1994/10/20 //
// FUJITSU PERSONAL COMPUTER SYSTEMS LIMITED //
// written by C-cube Soft T.Nakamura //
//--------------------------------------------------------------------------//
!!MAINBLOCK
event @OPEN.EXTERN {
//--- 送信情報チェックテーブルの設定 ---//
//--- -1 : 不必要 / 0 : あってもなくてもいい / 1 : 必須 ---//
$id = #FALSE;
sys.global( $id );
sys.global( $SendDataChkTbl );
$SendDataChkTbl = [
// SUB TO RE FROM SDATE KEY MESS DATA
[ 1, 1, -1, 0, 0, -1, -1, 1 ], // 0 : メール
[ 1, -1, -1, -1, -1, 0, -1, 1 ], // 1 : 掲示板(BBS)文書
[ 1, -1, -1, -1, -1, -1, -1, 1 ], // 2 : HP文書
[ 1, -1, 0, -1, -1, -1, -1, 1 ], // 3 : 会議室文書
[ 1, -1, -1, 0, -1, -1, -1, 1 ], // 4 : シスオペ宛メール
[ 1, -1, -1, -1, -1, 1, 0, 1 ], // 5 : データライブラリ
];
return;
}
event @CLOSE.EXTERN {
sys.local( $SendDataChkTbl );
sys.local( $id );
return;
}
event @ERROR {
if( $id != #FALSE ) {
file.close( $id );
$id = #FALSE;
}
AUTO.fatalError();
event.mainLoop();
}
//------------------------------//
//--- ファイルを送信する ---//
//------------------------------//
function AUTO.sendFileTSR(
$idxList, // インデックス情報リスト
$mode ) // モード 0 : メール
// 1 : 掲示板(BBS)文書
// 2 : HP文書
// 3 : メッセージ(フォーラム会議室)文書
// 4 : シスオペ宛メール
// 5 : データライブラリ
{
$intRecFlg = sys.intRec?();
sys.stopIntRec();
$AUTO.WAIT15 = AUTO.getWaitChar( 15 );
$AUTO.WAIT60 = AUTO.getWaitChar( 60 );
$id = #FALSE;
$des = #TRUE;
//--- データの初期設定 ---//
table( $mode ) {
0 { $errTitle = "メール送信"; }
1 { $errTitle = "掲示板(BBS)文書送信"; }
2 { $errTitle = "HP文書送信"; }
3 { $errTitle = "会議室文書送信"; }
4 { $errTitle = "シスオペ宛メール送信"; }
5 { $errTitle = "データライブラリ送信"; }
}
$dataList = ["", [], -1, "", "", [], #FALSE, #FALSE];
//--- 拡張情報を取得する ---//
Auto.getDataToEtx( $dataList, $idxList );
//--- 送信データが設定されていません ---//
$data = list.getNth( $dataList, 8 );
if( $data == #FALSE ) {
$errMsg =["送信文書(データ)が設定されていません。",
"送信を中断しました。"];
goto ERROR_P;
}
//--- 送信データのタイプチェック ---//
if( list.getNth( $idxList, 3 ) == 0x203 ) { // ファイル指定データ
$type = 0;
$ctrl = list.getNth( $data, 1 );
} else { // ログ内データ
$type = 1;
$ctrl = list.getNth( $data, 5 );
}
if( $ctrl & 0x8000 ) {
//--- バイナリ送信出来ない物の場合のチェック ---//
if(( $mode == 1 )||( $mode == 2 )||( $mode == 3 )||( $mode == 4 )) {
$errMsg = ["バイナリデータは送信できません。",
"送信を中断しました。"];
goto ERROR_P;
}
}
//--- 各種情報のチェック ---//
$chkList = list.getNth( $SendDataChkTbl, $mode + 1 );
$i = 1;
loop {
if( $i == 9 ) {
exit;
}
if( list.getNth( $chkList, $i ) != 1 ) {
$i = $i + 1;
continue;
}
$data = list.getNth( $dataList, $i );
table( $i ) {
1 { // 題名のチェック
if( $data == "" ) {
$errMsg = ["題名の設定されていない文書が存在します。",
"送信を中断しました。"];
goto ERROR_P;
}
}
2 { // 宛先のチェック
if( list.size( $data ) == 0 ) {
$errMsg = ["宛先の設定されていない文書が存在します。",
"送信を中断しました。"];
goto ERROR_P;
}
}
3 { // 応答番号のチェック
if( $data == #FALSE ) {
$errMsg = ["応答番号の設定されていない文書が存在します。",
"送信を中断しました。"];
goto ERROR_P;
}
}
4 { // 差出人のチェック
if( $data == "" ) {
$errMsg = ["差出人の設定されていない文書が存在します。",
"送信を中断しました。"];
goto ERROR_P;
}
}
5 { // 期日指定のチェック
if( $data == "" ) {
$errMsg = ["期日指定の設定されていない文書が存在します。",
"送信を中断しました。"];
goto ERROR_P;
}
}
6 { // 検索キーのチェック
if( $data == "" ) {
$errMsg = ["検索キーの設定されていない文書が存在します。",
"送信を中断しました。"];
goto ERROR_P;
}
}
7 { // メッセージのチェック
if( $data == #FALSE ) {
$errMsg =["メッセージの設定されていない文書が存在します。",
"送信を中断しました。"];
goto ERROR_P;
}
}
8 { // データのチェック
if( $data == #FALSE ) {
$errMsg =["送信文書(データ)が設定されていません。",
"送信を中断しました。"];
goto ERROR_P;
}
}
}
$i = $i + 1;
}
//--- いざ送信 ---//
$sub = list.getNth( $dataList, 1 );
$to = list.getNth( $dataList, 2 );
$re = list.getNth( $dataList, 3 );
$from = list.getNth( $dataList, 4 );
$sdate = list.getNth( $dataList, 5 );
$key = list.getNth( $dataList, 6 );
$mess = list.getNth( $dataList, 7 );
$data = list.getNth( $dataList, 8 );
//--- ファイル送信の場合は、ファイルの存在のチェックを行う ---//
if( $type == 0 ) {
if( file.exist( list.getNth( $data, 3 )) == #FALSE ) {
//--- 送信すべきファイルが無い? ---//
$errMsg = ["送信ファイルが存在しません。",
str.join(["ファイル名:", list.getNth( $data, 3 )], "" )];
goto ERROR_P;
}
}
//--- 送信コマンドの送信 ---//
if( $mode == 2 ) { // HP
$cmd = "WRITE\r";
} elif( $mode == 0 ) { // メール
if( $ctrl & 0x8000 ) {
$cmd = "UPLOAD PROT:BPL TYPE:BIN\r";
} else {
$cmd = "COMPOSE\r";
}
} elif( $mode == 4 ) { // SYM
AUTO.sendCommand("SYM");
$cmd = "1\r";
} else { // メッセージ / BBS
$cmd = "COMPOSE\r";
}
AUTO.putStr2( $cmd );
//--- 文書埋め込みコマンドの送信(テキストの場合のみ) ---//
$maxLine = 100;
if( !( $ctrl & 0x8000 )) {
$errFlg = #FALSE;
if( $mode == 0 ) { // メール(TEXT)
comtable( $a, 0 ) {
"%3d 行まで" { $maxLine = data.toNumber( $a ); }
"終了は行頭で/E)\n\w\w" { exit; }
$AUTO.WAIT15 { AUTO.putStr("\r"); }
interval { AUTO.haltCheck(); }
">\w\w" { $errFlg = #TRUE; exit; }
}
if( $errFlg == #TRUE ) {
$errMsg = ["ファイルの送信に失敗しました。",
"送信を中断しました。"];
goto ERROR_P;
}
AUTO.waitPrompt( #FALSE );
AUTO.putStr2(str.join(["SUBJ:", $sub, "\r"], "" ));
AUTO.waitPrompt( #FALSE );
if( $sdate != "" ) {
AUTO.putStr2( str.join(["SDATE:", $sdate, "\r"], "" ));
AUTO.waitPrompt( #FALSE );
}
if( $from != "" ) {
AUTO.putStr2( str.join(["FROM:", $from, "\r"], "" ));
AUTO.waitPrompt( #FALSE );
}
} elif(( $mode == 1 )||( $mode == 4 )) {// BBS 及び SYM(TEXT)
comtable( $a, 0 ) {
"%3d 行まで" { $maxLine = data.toNumber( $a ); }
"終了は行頭で/E) \n\w\w" { exit; }
"終了は行頭で/E)\n\w\w" { exit; }
$AUTO.WAIT15 { AUTO.putStr("\r"); }
interval { AUTO.haltCheck(); }
">\w\w" { $errFlg = #TRUE; exit; }
}
if( $errFlg == #TRUE ) {
$errMsg = ["ファイルの送信に失敗しました。",
"送信を中断しました。"];
goto ERROR_P;
}
AUTO.waitPrompt( #FALSE );
AUTO.putStr2( str.join(["SUBJ:", $sub, "\r"], "" ));
AUTO.waitPrompt( #FALSE );
} elif( $mode == 2 ) { // HP
comtable( $a, 300 ) {
interval { AUTO.haltCheck(); }
":\w\w" {
AUTO.putStr2( str.join([$sub, "\r"], "" ));
AUTO.waitPrompt( #TRUE );
AUTO.putStr2("1\r");
exit;
}
timeout {
//--- 送信失敗 ---//
$errMsg = ["ファイルの送信に失敗しました。",
"送信を中断しました。"];
goto ERROR_P;
}
}
comtable( $a, 0 ) {
"%3d 行まで" { $maxLine = data.toNumber( $a ); }
"終了は行頭で/E)\n\w\w" { exit; }
$AUTO.WAIT15 { AUTO.putStr("\r"); }
interval { AUTO.haltCheck(); }
">\w\w" { $errFlg = #TRUE; exit; }
}
if( $errFlg == #TRUE ) {
$errMsg = ["ファイルの送信に失敗しました。",
"送信を中断しました。"];
goto ERROR_P;
}
} elif( $mode == 3 ) { // 会議室文書
comtable( $a, 0 ) {
"%3d 行まで" { $maxLine = data.toNumber( $a ); }
"終了は行頭で/E)\n\w\w" { exit; }
$AUTO.WAIT15 { AUTO.putStr("\r"); }
interval { AUTO.haltCheck(); }
">\w\w" { $errFlg = #TRUE; exit; }
}
if( $errFlg == #TRUE ) {
$errMsg = ["ファイルの送信に失敗しました。",
"送信を中断しました。"];
goto ERROR_P;
}
AUTO.waitPrompt( #FALSE );
AUTO.putStr2( str.join(["SUB:", $sub, "\r"], "", ));
AUTO.waitPrompt( #FALSE );
if( $re == #FALSE ) {
AUTO.putStr2("RE:NONE\r");
AUTO.waitPrompt( #FALSE );
} elif( $re > 0 ) {
AUTO.putStr2( str.join(["RE:",data.toString( $re ),"\r"],"" ));
AUTO.waitPrompt( #FALSE );
}
}
}
//--- 本文の送信 ---//
$lastCmd = "1\r";
$sendNo = "1";
//$lastCmd = "2\r";
//$sendNo = "2";
if( $ctrl & 0x8000 ) { // バイナリの場合
comtable( $a, 1200 ) {
interval { AUTO.haltCheck(); }
$AUTO.WAIT60 { AUTO.putStr("\r"); }
":\w\w" { // ファイル名の送信
if( $type == 0 ) {
//--- ファイル名指定 ---//
$fName = list.getNth( $data, 3 );
} else {
//--- ログ内データ指定 ---//
$fName = AUTO.getLogFileName();
}
AUTO.putStr2( str.join([$fName, "\r"], "" ));
}
"-アップロード開始-\n" {
exit;
}
}
$IdxId = AUTO.getIdxFileId();
$idxHeader = lsi.getInfo( $IdxId );
list.del1st( $idxHeader );
list.put1st( $idxHeader, AUTO.getIdxNum());
lsi.setInfo( $IdxId, $idxHeader );
event.mask( @ERROR );
if( $type == 0 ) {
$ret = xfer.sendBinary( list.getNth( $data, 3 ), -1, -1, [] );
} else {
$ret = xfer.sendBinary( AUTO.getLogFileName(),
list.getNth( $data, 6 ),
list.getNth( $data, 7 ), [] );
}
event.unmask( @ERROR );
if( $ret != #TRUE ) {
$errMsg = ["ファイルの送信に失敗しました。",
"送信を中断しました。"];
goto ERROR_P;
}
} else { // テキストの場合
if( $type == 0 ) {
//--- ファイル送信の場合 ---//
$id = file.open( list.getNth( $data, 3 ), "", 1 );
$line = 0;
loop {
$str = file.getString( $id );
if( $str == #FALSE ) {
exit;
}
if( code( $str ) == 0x1A ) {
exit;
}
if(( str.length( $str ) >= 256 ) &&
(code( str.right( $str, 1 )) != 0x0A )) {
$lastCmd = "2\r";
$sendNo = "2";
$errMsg = [
"1行が長すぎるか、テキストファイルではない可能性があります。",
"送信を中断しました。",
str.join(["送信文書タイトル:", $sub], "" )];
AUTO.error( $errTitle, $errMsg );
$des = #FALSE;
exit;
}
$str = str.replaceAll( $str, "\n", "" );
if( str.length( $str ) > 80 ) {
$line = $line + ( str.length( $str ) / 80 );
}
if( $line == $maxLine ) {
//--- 送信可能行数をオーバーした場合は ---//
//--- エラーメッセージを残して送信中断 ---//
$lastCmd = "2\r";
$sendNo = "2";
$errMsg = [str.join(["送信可能行数(",
data.toString( $maxLine ), "行)",
"を超えました。"], "" ),
"送信を中断しました。",
str.join(["送信文書タイトル:", $sub], "" )];
AUTO.error( $errTitle, $errMsg );
$des = #FALSE;
exit;
}
AUTO.putStr2( str.join([$str, "\r"], "" ));
AUTO.waitPrompt( #FALSE );
$line = $line + 1;
}
file.close( $id );
} else {
$id = file.open( AUTO.getLogFileName(), "", 1 );
$topPtr = list.getNth( $data, 6 );
$size = list.getNth( $data, 7 );
file.seek( $id, $topPtr, 0 );
$endFlg = #FALSE;
//--- 1行ずつ読み込んで、送信する ---//
$line = 0;
loop {
$str = file.getString( $id );
if( $str == #FALSE ) {
exit;
}
if( code( $str ) == 0x1A ) {
exit;
}
$ptrWk = file.tell( $id );
if( $ptrWk >= $topPtr + $size ) {
$str = str.left( $str, str.length( $str ) -
( $ptrWk - ( $topPtr + $size )));
$endFlg = #TRUE;
}
if(( str.length( $str ) >= 256 ) &&
( code( str.right( $str, 1 )) != 0x0A )) {
$lastCmd = "2\r";
$sendNo = "2";
$errMsg = [
"1行が長すぎるか、テキストファイルではない可能性があります。",
"送信を中断しました。",
str.join(["送信文書タイトル:", $sub], "" )];
AUTO.error( $errTitle, $errMsg );
$des = #FALSE;
exit;
}
$str = str.replaceAll( $str, "\n", "" );
if( str.length( $str ) > 80 ) {
$line = $line + ( str.length( $str ) / 80 );
}
if( $line == $maxLine ) {
//--- 送信可能行数をオーバーした場合は ---//
//--- エラーメッセージを残して送信中断 ---//
$lastCmd = "2\r";
$sendNo = "2";
$errMsg = [str.join(["送信可能行数(",
data.toString( $maxLine ), "行)",
"を超えました。"], "" ),
"送信を中断しました。",
str.join(["送信文書タイトル:", $sub], "" )];
AUTO.error( $errTitle, $errMsg );
$des = #FALSE;
exit;
}
AUTO.putStr2( str.join([$str, "\r"], "" ));
AUTO.waitPrompt( #FALSE );
if( $endFlg == #TRUE ) {
exit;
}
$line = $line + 1;
}
file.close( $id );
$id = #FALSE;
}
AUTO.putStr("/E\r");
}
//--- 各種指定の処理 ---//
$mode = 0;
$toNum = list.size( $to );
if( $toNum > 10 ) {
$toNum = 10;;
}
$toCnt = 0;
comtable( $a, 0 ) {
interval { AUTO.haltCheck(); }
">\w\w" { exit; }
">\w\w" { exit; }
$AUTO.WAIT60 {
AUTO.putStr("\r");
if( $mode == 0 ) {
AUTO.putStr("/E\r");
}
}
"\n◆" {
$mode = 1;
if( $toFlg == 1 ) {
$errMsg = [str.join(["宛先に誤りがあります(",
list.getNth( $to, $toCnt ), ")。"], "" ),
"送信を中止しました。"];
AUTO.error( $errTitle, $errMsg );
$des = #FALSE;
$lastCmd = "2\r";
goto TO_SEND;
}
}
"\n題名" {
$mode = 1;
AUTO.waitPrompt( #TRUE );
AUTO.putStr( $sub );
AUTO.putStr("\r");
}
"\n確認" {
$mode = 1;
AUTO.waitPrompt( #TRUE );
AUTO.putStr("1\r");
}
"\n送信 (" {
//--- 期日指定が無い場合、半角の '(' らしい ---//
$mode = 1;
AUTO.waitPrompt( #TRUE );
AUTO.putStr( $sendNo );
AUTO.putStr("\r");
}
"\n送信(" {
//--- 期日指定がある場合、全角の'(' らしい ---//
$mode = 1;
comtable( $b, 300 ) {
"%d:期日指定" {
if( $sdate != "" ) {
$sendNo = data.toString( data.toNumber( $b ));
}
}
":\w\w" { exit; }
interval { AUTO.haltCheck(); }
}
AUTO.putStr( $sendNo );
AUTO.putStr("\r");
}
"\n登録 (" {
$mode = 1;
AUTO.waitPrompt( #TRUE );
AUTO.putStr( $lastCmd );
}
"\n送信期日 (" {
$mode = 1;
if( $sdate == "" ) {
$errMsg = ["送信期日の指定が出来ません。"
"送信期日を確認してください。",
str.join(["ファイル名:", $path, "\n"], "" ),
"送信を中断しました。"];
AUTO.error( $errTitle, $errMsg );
$des = #FALSE;
$lastCmd = "2\r";
}
AUTO.waitPrompt( #TRUE );
AUTO.putStr( $sdate );
AUTO.putStr("\r");
$sdate = "";
}
"\n修正 (" {
$mode = 1;
AUTO.waitPrompt( #TRUE );
AUTO.putStr("2\r");
}
"\n宛先 (" {
$mode = 1;
TO_SEND: AUTO.waitPrompt( #TRUE );
if( $toNum == $toCnt ) {
$toFlg = 0;
AUTO.putStr("\r");
} else {
$toFlg = 1;
AUTO.putStr( list.getNth( $to, $toCnt + 1 ));
AUTO.putStr("\r");
$toCnt = $toCnt + 1;
}
}
"\n検索キーの選択" {
$mode = 1;
AUTO.waitPrompt( #TRUE );
if( list.size( $key ) != 0 ) {
AUTO.sendCommand("0");
AUTO.putStr( list.get1st( $key ));
AUTO.putStr("\r");
} else {
//--- 検索キー指定が無い場合、無条件に 1 を選択 ---//
AUTO.putStr("1\r");
}
}
}
//--- 後始末 ---//
if( $intRecFlg == #TRUE ) {
sys.startIntRec();
}
return( $des );
ERROR_P:
AUTO.error( $errTitle, $errMsg );
if( $id != #FALSE ) {
file.close( $id );
$id = #FALSE;
}
if( $intRecFlg == #TRUE ) {
sys.startIntRec();
}
return( #FALSE );
}
//--------------------------//
//--- 拡張情報の取得 ---//
//--------------------------//
function Auto.getDataToEtx(
$dataList, // 拡張情報格納リスト
$idxList ) // インデックス情報リスト
{
//--- 各種情報の初期値設定 ---//
$sub = list.getNth( $dataList, 1 );
$to = list.getNth( $dataList, 2 );
$re = list.getNth( $dataList, 3 );
$from = list.getNth( $dataList, 4 );
$sdate = list.getNth( $dataList, 5 );
$key = list.getNth( $dataList, 6 );
$mess = list.getNth( $dataList, 7 );
$data = list.getNth( $dataList, 8 );
//--- 目的のインデックスにシークし、タグを読み込む ---//
$idxId = AUTO.getIdxFileId();
lsi.seekIndex( $idxId, list.getNth( $idxList, 2 ));
lsi.getIndex( $idxId );
//--- タグを順番に読んでいって、拡張情報リストに設定していく ---//
$tagNo = -3;
// $re = -1; 95.04.17
$re = #FALSE ;
$i = 0;
loop {
$retList = lsi.getTag( $idxId, $tagNo );
if( list.size( $retList ) == 0 ) {
exit;
}
$tagKind = list.getNth( $retList, 1 );
$tagList = list.getNth( $retList, 2 );
table( $tagKind ) {
0x105 { // 送信文書タイトル
$sub = list.get1st( $tagList );
}
0x111 { // 送信先ID
list.putLast( $to, list.get1st( $tagList ));
}
0x402 { // 送信応答番号
if( list.get1st( $tagList ) == 1 ) {
$re = list.get1st( list.getNth( $tagList, 2 ));
}
}
// 0x501 { // 送信応答番号(~10A用はマーカの最後に入っている)
// if ( ( $re == -1) && (list.get1st( $tagList ) == 7) ) {
// // 電子会議室?
// $markList = list.getNth( $tagList, 2 );
// if ( list.size( $markList ) >= 6 ) { // 発言番号がある?
// $re = list.getNth( $markList, 6 ); // 発言番号取得?
// }
// }
// }
0x114 { // 差出人名
$from = list.get1st( $tagList );
}
0x115 { // 送信指定期日
$sdate = list.get1st( $tagList );
}
0x116 { // 検索キー
list.putLast( $key, list.get1st( $tagList ));
}
0x301 { // メッセージ
$mess = $tagList;
}
0x303 { // 送信データ(ログ内)
if( list.getNth( $idxList, 3 ) == 0x303 ) {
$i = $i + 1;
if( list.getNth( $idxList, 4 ) == $i ) {
$data = $tagList;
}
}
}
0x203 { // 送信データ(ファイル)
if( list.getNth( $idxList, 3 ) == 0x203 ) {
$i = $i + 1;
if( list.getNth( $idxList, 4 ) == $i ) {
$data = $tagList;
}
}
}
}
$tagNo = -2;
}
//--- 復帰データの加工 ---//
list.delNth( $dataList, 1 );
list.putNth( $dataList, 0, $sub );
list.delNth( $dataList, 2 );
list.putNth( $dataList, 1, $to );
list.delNth( $dataList, 3 );
list.putNth( $dataList, 2, $re );
list.delNth( $dataList, 4 );
list.putNth( $dataList, 3, $from );
list.delNth( $dataList, 5 );
list.putNth( $dataList, 4, $sdate );
list.delNth( $dataList, 6 );
list.putNth( $dataList, 5, $key );
list.delNth( $dataList, 7 );
list.putNth( $dataList, 6, $mess );
list.delNth( $dataList, 8 );
list.putNth( $dataList, 7, $data );
return( #TRUE );
}
!!ENDBLOCK